package com.binge.backend.controller;

import com.binge.backend.dto.LoginDto;
import com.binge.backend.dto.UserDto;
import com.binge.backend.service.IUserService;
import com.binge.backend.util.ResultVo;
import com.binge.backend.util.TokenUtil;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;

/**
 * @author Binge
 * @desc 用户页面控制器类
 * @date 2020/10/17 下午1:58
 */
@RestController
@Slf4j
@Api(value = "用户 API 接口",tags = "用户 API 接口")
@RequestMapping("/user")
public class UseController {
    @Resource
    private IUserService userService;
    /**
     * 处理注册请求
     * @param userDto 用户注册信息
     * @return 注册结果 success:注册成功  fail:注册失败
     */
    @PostMapping("/register")
    @ApiOperation("用户注册")
    public ResultVo<String> register(@RequestBody UserDto userDto){
        log.info(userDto.toString());
        if(userService.register(userDto)){
            log.info("用户注册成功");
            return ResultVo.success("ok");
        }
        log.info("用户注册失败");
        return ResultVo.fail("fail");
    }



    /**
     * 处理注册用户名存在请求
     * @param username 注册用户名
     * @return 是否存在 yes:可以注册  no：用户名存在
     */
    @GetMapping("/username")
    @ApiOperation("用户名存在检查")
    public ResultVo<String> checkExistName(String username) {
        return null;
    }

    /**
     * 登录请求处理
     * @param loginDto 登录信息
     * @return 登录结果 yes：登录成功 no：登录失败
     */
    @PostMapping("/login")
    @ApiOperation("用户登录")
    public ResultVo<String> login(@RequestBody LoginDto loginDto) {
        log.info(loginDto.toString());
        Boolean result = userService.login(loginDto);
        if (result) {
            log.info("登录成功");
            //创建Token发送给客户端(内容=用户名+当前时间戳)
            String token = TokenUtil.sign(loginDto.getUsername(),String.valueOf(System.currentTimeMillis()));
            log.info("token:"+token);
            return ResultVo.success(token);
        }
        log.info("登陆失败");
        return ResultVo.fail("login fail");
    }
}
